/*
使用createstatement,手撕一个SQL注入
这里例子里，我们输入admin  1' or 1=1 --（空格） 回车，就产生了sql注入，进入了登录成功的流程
admin
1' or 1=1 --
 */
package MyJDBC;

import com.mysql.cj.protocol.Resultset;

import java.sql.*;
import java.util.Scanner;

public class SQLInject {
    public static void main(String[] args) {
        try(Connection connection = DriverManager.getConnection("jdbc:mysql://192.168.32.130:3306/study", "root", "123456");
            Statement statement = connection.createStatement();
            Scanner scanner = new Scanner(System.in) ){  //使用Scanner接收用户的输入
            String sql = "select * from user where username = '"+scanner.nextLine()+"' and password = '"+scanner.nextLine()+"';";
            System.out.println(sql);  //把组合后的sql语句打印出来看下输入的注入语句最后组合成什么样子
            ResultSet set = statement.executeQuery(sql);
            //分别使用scanner.nextLine()读取用户每次回车前的输入

            while(set.next()){
                String username = set.getString(1);
                System.out.println(username + "登录成功");
            }
        }catch (SQLException e){
            e.printStackTrace();
        }
    }
    /*
    分别输入以下组合进行测试
    1、正确的用户名和密码
    2、错误的用户名和密码
    3、正确的用户名和密码为 1' or 1=1 --(空格) 的情况
    4、用户名为admin' or 1=1 -- ;  密码为空的情况
     */
}
